package fr.babos.graphic.components.base 
{
	import flash.display.DisplayObjectContainer;
	import fr.babos.core.masters.IMasterDisplayObject;
	import org.osflash.signals.Signal;
	
	/**
	 * @author ZoulouX
	 */
	public interface IResizableComponent extends IMasterDisplayObject
	{
		/**
		 * Le signal du redimensionnement
		 */
		function get onResized ():Signal;
		
		/**
		 * La largeur en passant par la superclasse
		 */
		function get superWidth ():Number;
		function set superWidth (value:Number):void;
		
		/**
		 * La hauter en passant par la superclasse
		 */
		function get superHeight ():Number;
		function set superHeight (value:Number):void;
		
		/**
		 * La largeur du composant
		 */
		function get width ():Number;
		function set width (value:Number):void;
		
		/**
		 * La largeur du composant
		 */
		function get height ():Number;
		function set height (value:Number):void;
		
		/**
		 * Position absolue par rapport au haut
		 */
		function get top ():Number;
		function set top (value:Number):void;
		
		/**
		 * Position absolue par rapport à la droite
		 */
		function get right ():Number;
		function set right (value:Number):void;
		
		/**
		 * Position absolue par rapport au bas
		 */
		function get bottom ():Number;
		function set bottom (value:Number):void;
		
		/**
		 * Position absolue par rapport à la gauche
		 */
		function get left ():Number;
		function set left (value:Number):void;
		
		/**
		 * Centrage horizontal du composant
		 */
		function get horizontalCenter ():Number;
		function set horizontalCenter (value:Number):void;
		
		/**
		 * Centrage vertical du composant
		 */
		function get verticalCenter ():Number;
		function set verticalCenter (value:Number):void;
		
		/**
		 * Définir la taille du composant
		 * @param	pWidth : La largeur
		 * @param	pHeight : La hauteur
		 * @return this, méthode chaînable
		 */
		function setSize (pWidth:Number, pHeight:Number):ResizableComponent;
		
		/**
		 * Placer le composant. Permet de configurer toutes les variables de placement en redispatchant qu'un seul signal.
		 * @param	pTop : Le décallage depuis le haut
		 * @param	pRight : Le décallage depuis la droite
		 * @param	pBottom : Le décallage depuis le bas
		 * @param	pLeft : Le décallage depuis la gauche
		 * @return this, méthode chaînable
		 */
		function place (pTop:Number = NaN, pRight:Number = NaN, pBottom:Number = NaN, pLeft:Number = NaN):ResizableComponent
		
		/**
		 * Centrer l'élément
		 * @param	pHorizontalCenter : Le décallage par rapport au centre horizontal
		 * @param	pVerticalCenter : Le décallage par rapport au centre vertical
		 * @return this, méthode chaînable
		 */
		function center (pHorizontalCenter:Number = NaN, pVerticalCenter:Number = NaN):ResizableComponent
		
		/**
		 * Spécifier le parent de ce composant
		 * @param	pParent : Le parent auquel ajouter ce composant
		 * @param	pName : Le nom de ce composant
		 * @param	pAt : A quel niveau (-1 pour au dessus)
		 * @return this, méthode chaînable
		 */
		function into (pParent:DisplayObjectContainer, pName:String = "", pAt:int = -1):ResizableComponent
	}
}